Field of the Invention
Embodiments of the present invention relate generally to graphics processing and, more specifically, to techniques for managing graphics processing resources in a tile-based architecture.
Description of the Related Art
Conventional graphics systems receive and process graphics primitives in an order specified by the applications programming interface (API). For example, various graphics APIs require that the primitive order be maintained; that is, the primitives must be rendered in the order presented by the application program. This requirement ensures that intersecting primitives are rendered deterministically to avoid the introduction of visual artifacts. Additionally, the results of rendering a later primitive may depend on changes to the state of the frame buffer generated by rendering an earlier primitive.
Processing graphics primitives in the order in which they are received from the application program further enables the graphics processor to determine when resources associated with a particular graphics primitive are no longer needed and, thus, may be released. For example, once a particular graphics primitive reaches the end of the graphics pipeline, the graphics processor may determine that the resources associated with the graphics primitive, such as buffered vertex attributes, are no longer needed and may be released. This process ensures that resources are efficiently allocated and de-allocated by the graphics processor.
More recently, various graphics systems have begun to implement a tiling architecture that divides the screen-space into tiles and processes data associated with each tile in a particular order. That is, data associated with a first tile is processed first, data associated with a second tile is processed second, and so on. In such graphics systems, graphics primitives are processed according to which tiles they intersect and typically are not processed in the order specified by the API. Additionally, each graphics primitive that intersects multiple screen-space tiles is sent through the screen-space pipeline multiple times, once for each tile intersected by the graphics primitive. As a result, when implementing a tiling architecture, the graphics processor cannot accurately determine whether resources associated with a particular graphics primitive can be released based only on tracking when the graphics primitive has reached the end of the graphics pipeline, since the resources may be needed in order to process subsequent tiles. Moreover, prematurely releasing resources needed to process subsequent tiles may introduce visual artifacts and/or application errors into the rendering process.
Accordingly, what are needed in the art are more effective techniques for managing the use and release of resources in a tile-based graphics architecture.